package com.example.javaee.controller;

import com.example.javaee.entity.Order;
import com.example.javaee.mapper.OrderMapper;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.*;

import java.util.HashMap;
import java.util.List;
import java.util.Map;

// 声明这是一个Spring Boot的REST控制器，返回数据会自动转为JSON格式
@RestController
// 定义这个控制器的基础请求路径为/api/orders
@RequestMapping("/api/orders")
// 允许来自http://localhost:5173的跨域请求，允许携带认证信息，并允许所有请求头
@CrossOrigin(origins = "http://localhost:5173", allowCredentials = "true", allowedHeaders = "*")
public class OrderController {

    // 自动注入OrderMapper（订单数据访问对象）
    @Autowired
    private OrderMapper orderMapper;

    // 处理GET /api/orders请求，获取所有订单列表
    @GetMapping("")
    public List<Order> getAllOrders() {
        try {
            // 调用orderMapper的findAll方法查询所有订单
            List<Order> orders = orderMapper.findAll();
            // 打印获取到的订单数量（用于调试）
            System.out.println("获取到的订单数量: " + (orders != null ? orders.size() : 0));
            return orders;
        } catch (Exception e) {
            // 打印异常堆栈信息
            e.printStackTrace();
            // 重新抛出异常
            throw e;
        }
    }

    // 处理GET /api/orders/search请求，根据关键词搜索订单
    @GetMapping("/search")
    public List<Order> searchOrders(@RequestParam String keyword) {
        // 调用orderMapper的search方法，传入关键词进行搜索
        return orderMapper.search(keyword);
    }

    // 处理POST /api/orders请求，添加新订单
    @PostMapping
    public Map<String, Object> addOrder(@RequestBody Order order) {
        // 创建返回结果的Map对象
        Map<String, Object> response = new HashMap<>();
        try {
            // 调用orderMapper的insert方法插入订单数据
            int result = orderMapper.insert(order);
            // 根据操作结果设置返回信息
            response.put("success", result > 0);
            response.put("message", result > 0 ? "添加成功" : "添加失败");
        } catch (Exception e) {
            // 如果出现异常，返回错误信息
            response.put("success", false);
            response.put("message", "添加失败：" + e.getMessage());
        }
        return response;
    }

    // 处理PUT /api/orders/{id}请求，更新指定ID的订单
    @PutMapping("/{id}")
    public Map<String, Object> updateOrder(@PathVariable String id, @RequestBody Order order) {
        // 创建返回结果的Map对象
        Map<String, Object> response = new HashMap<>();
        try {
            // 设置订单的ID（从路径参数获取）
            order.set订单编号(id);
            // 调用orderMapper的update方法更新订单
            int result = orderMapper.update(order);
            // 根据操作结果设置返回信息
            response.put("success", result > 0);
            response.put("message", result > 0 ? "更新成功" : "更新失败");
        } catch (Exception e) {
            // 如果出现异常，返回错误信息
            response.put("success", false);
            response.put("message", "更新失败：" + e.getMessage());
        }
        return response;
    }

    // 处理DELETE /api/orders/{id}请求，删除指定ID的订单
    @DeleteMapping("/{id}")
    public Map<String, Object> deleteOrder(@PathVariable String id) {
        // 创建返回结果的Map对象
        Map<String, Object> response = new HashMap<>();
        try {
            // 调用orderMapper的delete方法删除订单
            int result = orderMapper.delete(id);
            // 根据操作结果设置返回信息
            response.put("success", result > 0);
            response.put("message", result > 0 ? "删除成功" : "删除失败");
        } catch (Exception e) {
            // 如果出现异常，返回错误信息
            response.put("success", false);
            response.put("message", "删除失败：" + e.getMessage());
        }
        return response;
    }
}